import java.util.ArrayList;
import java.util.List;

public class StringExtractor {
    public static List<String> extractStrings(String code) {
        // 用于存储提取出的字符串的列表
        List<String> strings = new ArrayList<>();
        // 标记是否处于字符串内部
        boolean inString = false;
        // 标记下一个字符是否为转义字符
        boolean escape = false;
        // 用于构建当前处理的字符串
        StringBuilder currentString = new StringBuilder();

        // 遍历代码中的每个字符
        for (char c : code.toCharArray()) {
            if (inString) {
                if (escape) {
                    // 如果当前字符是转义字符，将其添加到字符串中
                    currentString.append(c);
                    // 重置转义标记
                    escape = false;
                } else if (c == '\\') {
                    // 如果当前字符是反斜杠，设置转义标记
                    escape = true;
                } else if (c == '"') {
                    // 如果当前字符是双引号，表示字符串结束
                    strings.add(currentString.toString());
                    // 清空当前字符串构建器
                    currentString.setLength(0);
                    // 重置字符串内部标记
                    inString = false;
                } else {
                    // 将普通字符添加到当前字符串中
                    currentString.append(c);
                }
            } else {
                // 如果不在字符串内部，遇到双引号表示开始一个新的字符串
                if (c == '"') {
                    inString = true;
                }
            }
        }
        // 返回提取出的字符串列表
        return strings;
    }

    public static void main(String[] args) {
        // 测试用的代码字符串
        String code = "一般学习一门编程语言的时候，基本上第一个程序是输出\"Hello World!\"";
        // 调用方法提取字符串
        List<String> extractedStrings = extractStrings(code);
        // 遍历提取出的字符串列表并打印
        for (String str : extractedStrings) {
            System.out.println("提取的字符串：\"" + str + "\"");
        }
    }
}